차례대로 보지 않을 예정이라 순서대로 쓰지 않는다.
Item 1. 생성자 대신 정적 팩토리 메서드를 고려하라
- 정적 팩토리 메서드: 클래스의 인스턴스를 반환하는 단순한 정적 메서드
- 장점
- 이름을 가질 수 있어 반환될 객체의 특정을 쉽게 묘사할 수 있다. 시그니처가 같은 생성자가 여러 개 필요할 것 같을 때 생성자를 정적 팩토리 메서드로 변경하고 차이를 잘 드러내는 이름을 지어주는 것이 좋다.
- 호출될 때마다 인스턴스를 새로 생성하지 않아도 된다. 불변 클래스의 경우 인스턴스를 미리 만들거나 새로 생성한 인스턴스를 캐싱하여 활용하는 식으로 불필요한 객체 생성을 막을 수 있다.
- 인스턴스 통제 클래스: 반복되는 요청에 같은 객체를 반환하는 식으로 인스턴스를 통제할 수 있다. 인스턴스를 통제하면 클래스를 싱글턴으로 만들 수도, 인스턴스화 불가한 클래스로 만들 수도 있다. 또한 동치인 인스턴스가 단 하나뿐임을 보장 가능하다.
- 반환 타입의 하위 타입 객체를 반환할 수 있는 능력이 있다. 반환할 객체의 클래스를 자유롭게 선택할 수 있게 한다.
- 입력 매개변수에 따라 매번 다른 클래스의 객체를 반환할 수 있다. 반환 타입의 하위 타입이기만 하면 어떤 클래스의 객체를 반환하든 상관 없다.
- 정적 팩토리 메서드를 작성하는 시점에는 반환할 객체의 클래스가 존재하지 않아도 된다.
- 단점 1.
Item 71. 필요 없는 검사 예외 사용은 피하라
- 검사 예외는 발생한 문제를 프로그래머가 처리하여 안전성을 높이게 해준다. (과하게 사용하면 쓰기 불편한 API가 된다. 호출하는 쪽에서 try catch로 처리하거나 바깥으로 던져 전파해야 하므로 부담을 준다.)
- 검사 예외를 던지는 메서드는 스트림 안에서 직접 사용할 수 없어서 자바 8부터는 부담이 커졌다.
- API를 제대로 사용해도 발생할 수 있는 예외이거나 프로그래머가 의미 있는 조치를 취할 수 있는 경우는 받아들일 수 있다. 그러나 둘 중 어디에도 해당되지 않는다면 비검사 예외를 사용하는 것이 좋다.
- 검사 예외가 프로그래머에게 지우는 부담은 메서드가 단 하나의 검사 예외만 던질 때가 가장 크다.
- 검사 예외를 회피하는 가장 쉬운 방법은 적절한 결과 타입을 담은 Optional을 반환하는 것이다. 대신 예외가 발생한 이유를 알려주는 부가 정보를 담을 수 없다는 것이다.